package br.com.sovi.socket.mina.voipequipamentos;

import org.openinsula.vulcano.orm.command.DaoCommand;
import org.openinsula.vulcano.orm.dao.query.DaoQuery;
import org.openinsula.vulcano.orm.dao.query.builder.DaoSelect;

import br.com.sovi.mobile.resources.ponto.VerifyInsideCercaCommand;
import br.com.sovi.persistence.Dispositivo;
import br.com.sovi.persistence.Ponto;

@SuppressWarnings("serial")
public class SalvarPontoCommand extends DaoCommand<Resposta> {

	private final PontoVOIPEquipamentosVO vo;

	public SalvarPontoCommand(PontoVOIPEquipamentosVO vo) {
		this.vo = vo;
	}

	@Override
	public Resposta execute() {
		DaoQuery<Dispositivo> query = new DaoSelect<Dispositivo>().all().from(Dispositivo.class).eq("serial",
				vo.getSerial()).eq("senha", vo.getSenha()).limit(0).toQuery();

		Dispositivo dispositivo = dao.findUnique(query);

		if (dispositivo != null) {
			Ponto ponto = new Ponto(new Double(vo.getLatitude()), new Double(vo.getLongitude()));
			dispositivo.addPonto(ponto);

			dao.persist(ponto);

			VerifyInsideCercaCommand verifyInsideCercaCommand = new VerifyInsideCercaCommand(dispositivo);

			if (verifyInsideCercaCommand.verificarUltimoPontoEmCerca()) {
				return Resposta.OK;
			}
			else {
				return Resposta.FORA_CERCA;
			}

		}
		else {
			return Resposta.FALHA_LOGIN;
		}
	}

}
